 {
	commands: {
		elements: [
			{elem: "Buffer",  },
		
		],
		
		modes: {
			// -1 is the default parent mode
			"0": {name: "Normal", cascade: -1, },


			"10": {name: "Autocomplete", cascade: 0, },
			"11": {name: "AutocompleteOpts", cascade: 0, },
			
			"666": {name: "VIM", },
			"667": {name: "VIM Insert", },
			"668": {name: "VIM Replace", },
			"669": {name: "VIM Visual", },
		},

		overlays: {
			"goto": {name: "GotoLine", flags: ["showGoToLineBar"]},
			"1": {name: "Find", flags: ["showFindBar"] },
		},
		
		keyConfig: [
			{elem: "Main", cmd: "EnterLayoutMode",  mods: "A",  key: "l", amt: 1},
			{mode: 10, elem: "Main", cmd: "ExitLayoutMode", mods: "",   key: "XK_Escape", amt: 1},
			{mode: 10, elem: "Main", cmd: "ExpandPanesX",   mods: "",   key: "x", amt: 1},
			{mode: 10, elem: "Main", cmd: "ExpandPanesX",   mods: "S",  key: "x", amt: -1},
			{mode: 10, elem: "Main", cmd: "ExpandPanesY",   mods: "",   key: "y", amt: 1},
			{mode: 10, elem: "Main", cmd: "ExpandPanesY",   mods: "S",  key: "y", amt: -1},
			
			
			{elem: "Main", cmd: "NextTab",  mods: "A",  key: "XK_Right", amt: 1},
			{elem: "Main", cmd: "PrevTab",  mods: "A",  key: "XK_Left", amt: 1},
			{elem: "Main", cmd: "MoveTabR", mods: "AS", key: "XK_Right", amt: 1},
			{elem: "Main", cmd: "MoveTabL", mods: "AS", key: "XK_Left", amt: 1},
			{elem: "Main", cmd: "SortTabs", mods: "AS", key: "s", amt: 1},
			
			{elem: "Main", cmd: "FocusPaneRelX", mods: "AT", key: "XK_Right", amt: 1},
			{elem: "Main", cmd: "FocusPaneRelX", mods: "AT", key: "XK_Left", amt: -1},
			{elem: "Main", cmd: "FocusPaneRelY", mods: "AT", key: "XK_Up", amt: -1},
			{elem: "Main", cmd: "FocusPaneRelY", mods: "AT", key: "XK_Down", amt: 1},
			
			{elem: "Main", cmd: "GoToTab", mods: "A", key: "1", amt: 0},
			{elem: "Main", cmd: "GoToTab", mods: "A", key: "2", amt: 1},
			{elem: "Main", cmd: "GoToTab", mods: "A", key: "3", amt: 2},
			{elem: "Main", cmd: "GoToTab", mods: "A", key: "4", amt: 3},
			{elem: "Main", cmd: "GoToTab", mods: "A", key: "5", amt: 4},
			{elem: "Main", cmd: "GoToTab", mods: "A", key: "6", amt: 5},
			{elem: "Main", cmd: "GoToTab", mods: "A", key: "7", amt: 6},
			{elem: "Main", cmd: "GoToTab", mods: "A", key: "8", amt: 7},
			{elem: "Main", cmd: "GoToTab", mods: "A", key: "9", amt: 8},
			{elem: "Main", cmd: "GoToTab", mods: "A", key: "0", amt: 9},
			
			{elem: "Main", cmd: "QuitWithoutSave", mods: "CS", key: "q", amt: 0},
			{elem: "Main", cmd: "OpenFileBrowser", mods: "", key: "XK_F2", amt: 0},
			{elem: "Main", cmd: "FuzzyOpener", mods: "", key: "XK_F4", amt: 0},
			{elem: "Main", cmd: "GrepOpen", mods: "CS", key: "g", amt: 0},
			{elem: "Main", cmd: "Calculator", mods: "T", key: "/", amt: 0},
			{elem: "Main", cmd: "SimpleWindowTest", mods: "C", key: "u", amt: 0},
			{elem: "Main", cmd: "CloseTab", mods: "CS", key: "w", amt: 0},
			{elem: "Main", cmd: "NewEmptyBuffer", mods: "CS", key: "n", amt: 0},
			{elem: "Main", cmd: "MainMenu", mods: "A", key: "m", amt: 0},
			{elem: "Main", cmd: "Terminal", mods: "T", key: "t", amt: 0},
			
			{elem: "Main", cmd: "OpenConjugate", mods: "C", key: "h", amt: ["c", "h"]},
			
			
			{elem: "Main", cmd: "FontNudgeWidth", mods: "CAT", key: "XK_Next", amt: -1},
			{elem: "Main", cmd: "FontNudgeWidth", mods: "CAT", key: "XK_Prior", amt: 1},
			{elem: "Main", cmd: "FontNudgeCenter", mods: "CAT", key: "XK_Home", amt: 1},
			{elem: "Main", cmd: "FontNudgeCenter", mods: "CAT", key: "XK_End", amt: -1},
			
			{elem: "Buffer", cmd: "ToggleGDBBreakpoint", mods: "A", key: "b", amt: 0},
			
			{elem: "FuzzyMatcher", cmd: "Exit", mods: "", key: "XK_Escape", amt: 0},
			{elem: "FuzzyMatcher", cmd: "MoveCursorV", mods: "", key: "XK_Up", amt: -1},
			{elem: "FuzzyMatcher", cmd: "MoveCursorV", mods: "", key: "XK_Down", amt: 1},
			{elem: "FuzzyMatcher", cmd: "OpenFile", mods: "", key: "XK_Return", amt: 0},
			
			{elem: "GrepOpen", cmd: "Exit", mods: "", key: "XK_Escape", amt: 0},
			{elem: "GrepOpen", cmd: "MoveCursorV", mods: "", key: "XK_Up", amt: -1},
			{elem: "GrepOpen", cmd: "MoveCursorV", mods: "", key: "XK_Down", amt: 1},
			{elem: "GrepOpen", cmd: "OpenFile", mods: "", key: "XK_Return", amt: 0},
			
			{elem: "FileBrowser", cmd: "CursorMoveNoWrap", mods: "", key: "XK_Up", amt: -1},
			{elem: "FileBrowser", cmd: "CursorMoveNoWrap", mods: "", key: "XK_Down", amt: 1},
			{elem: "FileBrowser", cmd: "CursorMoveNoWrap", mods: "C", key: "XK_Up", amt: -5},
			{elem: "FileBrowser", cmd: "CursorMoveNoWrap", mods: "C", key: "XK_Down", amt: 5},
			{elem: "FileBrowser", cmd: "UpDir", mods: "", key: "XK_BackSpace", amt: 0},
			{elem: "FileBrowser", cmd: "SmartOpen", mods: "", key: "XK_Return", amt: 0},
			{elem: "FileBrowser", cmd: "ToggleSelect", mods: "", key: "XK_space", amt: 0},
			/*{elem: "FileBrowser", cmd: "JumpToLetter", mods: "", key: "", amt: 0}, */
			
			{elem: "Buffer", cmd: "MoveCursorH", mods: "", key: "XK_Left", amt: -1, flags: ["provokeAC", "scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "MoveCursorH", mods: "", key: "XK_Right", amt: 1, flags: ["provokeAC", "scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "MoveCursorV", mods: "", key: "XK_Up", amt: -1, flags: ["provokeAC", "scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "MoveCursorV", mods: "", key: "XK_Down", amt: 1, flags: ["provokeAC", "scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "Backspace", mods: "", key: "XK_BackSpace", amt: 0, flags: ["provokeAC", "scrollToCursor", "resetCursorBlink", "rehighlight"]},
			{elem: "Buffer", cmd: "Delete", mods: "", key: "XK_Delete", amt: 0, flags: ["provokeAC", "scrollToCursor", "resetCursorBlink", "rehighlight"]},
			{elem: "Buffer", cmd: "SplitLineIndent", mods: "", key: "XK_Return", amt: 0, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak", "rehighlight"]},
			{elem: "Buffer", cmd: "MovePage", mods: "", key: "XK_Prior", amt: -1, flags: ["undoSeqBreak"]},
			{elem: "Buffer", cmd: "MovePage", mods: "", key: "XK_Next", amt: 1, flags: ["undoSeqBreak"]},
			{elem: "Buffer", cmd: "ScrollScreenPctV", mods: "S", key: "XK_Prior", amt: -50, },
			{elem: "Buffer", cmd: "ScrollScreenPctV", mods: "S", key: "XK_Next", amt: 50, },
			{elem: "Buffer", cmd: "ScrollLinesV", mods: "T", key: "XK_Up", amt: -5, },
			{elem: "Buffer", cmd: "ScrollLinesV", mods: "T", key: "XK_Down", amt: 5, },
//			{elem: "Buffer", cmd: "ScrollColsH", mods: "", key: "BLUR_FindBox", amt: 5, },
//			{elem: "Buffer", cmd: "ScrollColsH", mods: "", key: "FOCUS_FindBox", amt: -5, },
			{elem: "Buffer", cmd: "ScrollColsH", mods: "T", key: "XK_Left", amt: -5, },
			{elem: "Buffer", cmd: "ScrollColsH", mods: "T", key: "XK_Right", amt: 5, },
			{elem: "Buffer", mods: "CT", key: "XK_Right", meta: [
				{elem: "SYSTEM", cmd: "Nop", amt: 5, },
				{elem: "Buffer", cmd: "ScrollColsH", amt: 5, },
				{elem: "Buffer", cmd: "ScrollColsH", amt: 5, },
			]},
//			{elem: "Buffer", cmd: "InsertString", mods: "CA", key: "r", amt: "    ", flags: ["scrollToCursor", "resetCursorBlink", "rehighlight"]}, // normal, printable characters
			{elem: "Buffer", cmd: "InsertChar", mods: "", key: "VK_Print", amt: 0, flags: ["provokeAC", "scrollToCursor", "resetCursorBlink", "rehighlight"]}, // normal, printable characters
			{elem: "Buffer", cmd: "InsertChar", mods: "AT", key: "n", amt: 0, flags: ["scrollToCursor", "resetCursorBlink", "rehighlight"]}, // inserts a null character, for testing or fun
			{elem: "Buffer", cmd: "GoToFirstCharOfLine", mods: "", key: "XK_Home", amt: 0, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "GoToLastCharOfLine", mods: "", key: "XK_End", amt: 0, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "GrowSelectionH", mods: "S", key: "XK_Left", amt: -1, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "GrowSelectionH", mods: "S", key: "XK_Right", amt: 1, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "GrowSelectionV", mods: "S", key: "XK_Up", amt: -1, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "GrowSelectionV", mods: "S", key: "XK_Down", amt: 1, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "GrowSelectionV", mods: "CS", key: "XK_Up", amt: -1, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "GrowSelectionV", mods: "CS", key: "XK_Down", amt: 1, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "ClearSelection", mods: "", key: "XK_Escape", amt: 0, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "PushCursor", mods: "A", key: "c", amt: 0, flags: []},
			{elem: "Buffer", cmd: "Indent", mods: "", key: "XK_Tab", amt: 0, flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "GrowSelectionToSOL", mods: "S", key: "XK_Home", amt: 0, },
			{elem: "Buffer", cmd: "GrowSelectionToEOL", mods: "S", key: "XK_End", amt: 0, },
			{elem: "Buffer", cmd: "Unindent", mods: "S", key: "XK_Tab", amt: 0, flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "Unindent", mods: "S", key: "XK_ISO_Left_Tab", amt: 0, flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
			//{elem: "Buffer", cmd: "LinePrependText", mods: "CAST", key: "XK_F1", amt: "//", flags: ["rehighlight", "undoSeqBreak"]},
			//{elem: "Buffer", cmd: "SurroundSelection", mods: "CAST", key: "XK_F1", amt: ["/*", "*/"], flags: ["rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "ReplaceLineWithSelectionTransform", mods: "AT", key: "s", 
				amt: ["%s", "%c", "typedef struct %s {\n\t%c\n} %s;"], flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "LineEnsureEnding", mods: "C", key: ";", amt: ";", flags: ["rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "LineEnsureEnding", mods: "C", key: "{", amt: "{", flags: ["rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "SmartBubbleSelection", mods: "CS", key: "p", amt: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", },
			{elem: "Buffer", cmd: "SmartComment", mods: "C", key: "d", amt: ["//", "/*", "*/"], flags: ["rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "StrictUncomment", mods: "CS", key: "d", amt: ["//", "/*", "*/"], flags: ["rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "DeleteCurLine", mods: "C", key: "k", amt: 0, flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "DuplicateLine", mods: "CA", key: "XK_Down", amt: 1, flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "DuplicateLine", mods: "CA", key: "XK_Up", amt: -1, flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "Cut", mods: "C", key: "x", amt: 0, flags: ["rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "SmartCut", mods: "CS", key: "x", amt: 0, flags: ["rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "Copy", mods: "C", key: "c", amt: 0, },
			{elem: "Buffer", cmd: "Paste", mods: "C", key: "v", amt: 0, flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "Paste", mods: "S", key: "XK_Insert", amt: 2, flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "SelectAll", mods: "C", key: "a", amt: 0, },
			{elem: "Buffer", cmd: "SelectNone", mods: "CS", key: "a", amt: 0, },
			{elem: "Buffer", cmd: "SelectToEOL", mods: "C", key: "l", amt: 0, },
			{elem: "Buffer", cmd: "SelectFromSOL", mods: "CS", key: "l", amt: 0, },
//			{elem: "Buffer", cmd: "GoToLine", mods: "C", key: "g", amt: 0, flags: ["scrollToCursor", "resetCursorBlink"]},
			{elem: "Buffer", cmd: "GoToSOL", mods: "C", key: "XK_Home", amt: 0, flags: ["scrollToCursor", "resetCursorBlink"]},
			{elem: "Buffer", cmd: "GoToEOL", mods: "C", key: "XK_End", amt: 0, flags: ["scrollToCursor", "resetCursorBlink"]},
			{elem: "Buffer", cmd: "GoToAfterIndent", mods: "T", key: "XK_Home", amt: 0, flags: ["scrollToCursor", "resetCursorBlink"]},
			{elem: "Buffer", cmd: "Undo", mods: "C", key: "z", amt: 0, flags: ["scrollToCursor", "rehighlight"]},
			{elem: "Buffer", cmd: "Redo", mods: "CS", key: "z", amt: 0, flags: ["scrollToCursor", "rehighlight"]},
			{elem: "Buffer", cmd: "Save", mods: "C", key: "s", amt: 0, },
			{elem: "Buffer", cmd: "PromptAndClose", mods: "CS", key: "j", amt: 0, },
			{elem: "Buffer", cmd: "Reload", mods: "", key: "XK_F5", amt: 0, flags: ["rehighlight"]},
//			{elem: "Buffer", cmd: "Find", mods: "C", key: "f", amt: 0, setMode: 1 },
			{elem: "Buffer", cmd: "SmartFind", mods: "C", key: "f", amt: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", setMode: 1 },
			{elem: "Buffer", cmd: "FindNext",     mods: "",  key: "XK_F3", amt: 0, setMode: 1, flags: ["scrollToCursor"]},
			{elem: "Buffer", cmd: "FindPrev",     mods: "S", key: "XK_F3", amt: 0, setMode: 1, flags: ["scrollToCursor"]},
			{elem: "Buffer", cmd: "ReplaceStart", mods: "C", key: "r", amt: 0, setMode: 1, },
			{elem: "Buffer", cmd: "Debug",              mods: "C", key: "q", amt: 0, flags: []},
			{elem: "Buffer", cmd: "Debug",              mods: "C", key: "w", amt: 1, flags: []},
			{elem: "Buffer", cmd: "RehilightWholeBuffer", mods: "CS", key: "r", amt: 0, flags: ["rehighlight"]},
			{elem: "Buffer", cmd: "SetBookmark",        mods: "CA", key: "b", amt: 0, flags: []},
			{elem: "Buffer", cmd: "RemoveBookmark",     mods: "CS", key: "b", amt: 0, flags: []},
			{elem: "Buffer", cmd: "ToggleBookmark",     mods: "C",  key: "b", amt: 0, flags: []},
			{elem: "Buffer", cmd: "GoToNextBookmark",   mods: "A",  key: "XK_Next", amt: 0, flags: ["scrollToCursor"]},
			{elem: "Buffer", cmd: "GoToPrevBookmark",   mods: "A",  key: "XK_Prior", amt: 0, flags: ["scrollToCursor"]},
			{elem: "Buffer", cmd: "GoToFirstBookmark",  mods: "A",  key: "XK_Home", amt: 0, flags: ["scrollToCursor"]},
			{elem: "Buffer", cmd: "GoToLastBookmark",   mods: "A",  key: "XK_End", amt: 0, flags: ["scrollToCursor"]},
			{elem: "Buffer", cmd: "ToggleMenu",         mods: "C",  key: "m", amt: 0, },
			{elem: "Buffer", cmd: "CollapseWhitespace", mods: "A",  key: "s", amt: 0, flags: ["scrollToCursor", "rehighlight", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "SelectSequenceUnder", mods: "C",  key: "p", amt: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", flags: ["resetCursorBlink"]},
			{elem: "Buffer", cmd: "MoveToNextSequence", mods: "C",  key: "XK_Right", amt: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", flags: ["scrollToCursor", "resetCursorBlink"]},
			{elem: "Buffer", cmd: "MoveToPrevSequence", mods: "C",  key: "XK_Left", amt: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", flags: ["scrollToCursor", "resetCursorBlink"]},
			{elem: "Buffer", cmd: "DeleteToNextSequence", mods: "C",  key: "XK_Delete", amt: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", flags: ["scrollToCursor", "resetCursorBlink", "rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "DeleteToPrevSequence", mods: "C",  key: "XK_BackSpace", amt: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", flags: ["scrollToCursor", "resetCursorBlink", "rehighlight", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "GrowSelectionToNextSequence", mods: "CS", key: "XK_Right", amt: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", flags: ["scrollToCursor", "resetCursorBlink"]},
			{elem: "Buffer", cmd: "GrowSelectionToPrevSequence", mods: "CS", key: "XK_Left", amt: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", flags: ["scrollToCursor", "resetCursorBlink"]},
			{elem: "Buffer", cmd: "FindStartSequenceUnderCursor", mods: "CS",  key: "f", amt: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", setMode: 1, flags: []},
			{elem: "Buffer", cmd: "PrependToSequence", mods: "C",  key: "8", amt: [".->abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", "*"], flags: ["rehighlight", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "PrependToSequence", mods: "C",  key: "7", amt: [".->abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", "&"], flags: ["rehighlight", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "SurroundSequence", mods: "C",  key: "9", amt: [".->abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", "(", ")"], flags: ["rehighlight", "resetCursorBlink", "undoSeqBreak"]},
			{elem: "Buffer", cmd: "SurroundSequence", mods: "C",  key: "0", amt: [".->abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", "(", ")"], flags: ["rehighlight", "resetCursorBlink", "undoSeqBreak"]},
			
			{elem: "Buffer", cmd: "PrintACDict", mods: "CT",  key: "d", flags: []},
			{elem: "Buffer", cmd: "ACProvoke", mods: "C",  key: "XK_space", flags: []},
			{mode: 10, elem: "Buffer", cmd: "ACMoveCursor", mods: "C",  key: "XK_Down", amt: 1, flags: []},
			{mode: 10, elem: "Buffer", cmd: "ACMoveCursor", mods: "C",  key: "XK_Up", amt: -1, flags: []},
			{mode: 10, elem: "Buffer", cmd: "ACReplaceWithSelected", mods: "C",  key: "XK_Return", flags: ["rehighlight", "undoSeqBreak", "resetCursorBlink"]},
			{mode: 10, elem: "Buffer", cmd: "ACCompletePrefix", mods: "C",  key: "XK_Tab", amt: 0, flags: ["rehighlight", "undoSeqBreak", "resetCursorBlink"]},
			{mode: 10, elem: "Buffer", cmd: "ACCompletePrefix", mods: "C",  key: "XK_ISO_Left_Tab", amt: 0, flags: ["rehighlight", "undoSeqBreak", "resetCursorBlink"]},
			{mode: 10, elem: "Buffer", cmd: "ACCancel", mods: "",  key: "XK_Escape", flags: []},
			{mode: 11, elem: "Buffer", cmd: "ACMoveCursor", mods: "",  key: "XK_Down", amt: 1, flags: []},
			{mode: 11, elem: "Buffer", cmd: "ACMoveCursor", mods: "",  key: "XK_Up", amt: -1, flags: []},
			{mode: 11, elem: "Buffer", cmd: "ACMoveCursor", mods: "C",  key: "XK_Down", amt: 1, flags: []},
			{mode: 11, elem: "Buffer", cmd: "ACMoveCursor", mods: "C",  key: "XK_Up", amt: -1, flags: []},
			{mode: 11, elem: "Buffer", cmd: "ACReplaceWithSelected", mods: "",  key: "XK_Return", amt: 0, flags: ["rehighlight", "undoSeqBreak", "resetCursorBlink"]},
			{mode: 11, elem: "Buffer", cmd: "ACReplaceWithSelected", mods: "C",  key: "XK_Return", amt: 0, flags: ["rehighlight", "undoSeqBreak", "resetCursorBlink"]},
			{mode: 11, elem: "Buffer", cmd: "ACCompletePrefix", mods: "",  key: "XK_Tab", amt: 0, flags: ["rehighlight", "undoSeqBreak", "resetCursorBlink"]},
			{mode: 11, elem: "Buffer", cmd: "ACCompletePrefix", mods: "C",  key: "XK_Tab", amt: 0, flags: ["rehighlight", "undoSeqBreak", "resetCursorBlink"]},
			{mode: 11, elem: "Buffer", cmd: "ACCancel", mods: "",  key: "XK_Escape", flags: []},
			
			{elem: "Buffer", cmd: "MacroToggleRecording", mods: "T",  key: "r"},
			{elem: "Buffer", cmd: "MacroReplay",          mods: "T",  key: "1", amt: 0},
			{elem: "Buffer", cmd: "MacroReplay",          mods: "T",  key: "2", amt: 1},
			{elem: "Buffer", cmd: "MacroReplay",          mods: "T",  key: "3", amt: 2},
			{elem: "Buffer", cmd: "MacroReplay",          mods: "T",  key: "4", amt: 3},
			{elem: "Buffer", cmd: "MacroReplay",          mods: "T",  key: "5", amt: 4},
			{elem: "Buffer", cmd: "MacroReplay",          mods: "T",  key: "6", amt: 5},
			{elem: "Buffer", cmd: "MacroReplay",          mods: "T",  key: "7", amt: 6},
			{elem: "Buffer", cmd: "MacroReplay",          mods: "T",  key: "8", amt: 7},
			{elem: "Buffer", cmd: "MacroReplay",          mods: "T",  key: "9", amt: 8},
			
			{mode: 1, elem: "Buffer", cmd: "FindNext",     mods: "",  key: "XK_F3", amt: 0, flags: ["centerOnCursor"]},
			{mode: 1, elem: "Buffer", cmd: "FindPrev",     mods: "S", key: "XK_F3", amt: 0, flags: ["centerOnCursor"]},
			{mode: 1, elem: "Buffer", cmd: "FindStop",     mods: "",  key: "XK_Escape", amt: 0, clearMode: 1, },
			{mode: 1, elem: "Buffer", cmd: "ReplaceStart", mods: "C", key: "r", amt: 0, flags: ["centerOnCursor"]},
			{mode: 1, elem: "Buffer", cmd: "ReplaceNext",  mods: "A", key: "r", amt: 0, flags: ["centerOnCursor", "rehighlight", "undoSeqBreak"]},
			{mode: 1, elem: "Buffer", cmd: "ReplaceAll",   mods: "A", key: "a", amt: 0, flags: ["centerOnCursor", "rehighlight", "undoSeqBreak"]},
			
			{mode: 0, elem: "Buffer", cmd: "GoToLineLaunch", mods: "C", key: "g", amt: 0, setMode: "goto", flags: ["resetCursorBlink"]},
			{mode: "goto", elem: "Buffer", cmd: "GoToLineSubmit", mods: "", key: "XK_Return", amt: 0, clearMode: "goto", flags: ["centerOnCursor", "resetCursorBlink"]},
			{mode: "goto", elem: "Buffer", cmd: "GoToLineCancel", mods: "", key: "XK_Escape", amt: 0, clearMode: "goto", flags: []},
			{mode: "goto", elem: "Buffer", cmd: "GoToLineCancel", mods: "C", key: "g", amt: 0, clearMode: "goto", flags: []},
			
			
			// vim mode
			{mode: 0,   elem: "Buffer", cmd: "SetMode",  mods: "T", key: "v",         amt: 666}, // vim command mode
			{mode: 666, elem: "Buffer", cmd: "SetMode",  mods: "T", key: "v",         amt:   0}, // back to normal mode
			{mode: 667, elem: "Buffer", cmd: "SetMode",  mods: "T", key: "v",         amt:   0}, // back to normal mode
			
			{mode: 667, elem: "Buffer", cmd: "SetMode",  mods: "",  key: "XK_Escape", amt: 666}, // insert -> cmd
			{mode: 668, elem: "Buffer", cmd: "SetMode",  mods: "",  key: "XK_Escape", amt: 666}, // replace -> cmd
			{mode: 669, elem: "Buffer", cmd: "SetMode",  mods: "",  key: "XK_Escape", amt: 666}, // visual -> cmd
			{mode: 666, elem: "Buffer", cmd: "SetMode",  mods: "",  key: "i",         amt: 667}, // cmd -> insert
			{mode: 666, elem: "Buffer", cmd: "SetMode",  mods: "S", key: "r",         amt: 668}, // cmd -> replace
			{mode: 666, elem: "Buffer", cmd: "SetMode",  mods: "",  key: "v",         amt: 669}, // cmd -> visual
			
			{mode: 666, cmd_list: [ // vim "normal" command mode
				{elem: "Buffer", cmd: "MoveCursorH", mods: "",  key: "h", amt: -1, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
				{elem: "Buffer", cmd: "MoveCursorH", mods: "",  key: "l", amt:  1, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
				{elem: "Buffer", cmd: "MoveCursorV", mods: "",  key: "k", amt: -1, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
				{elem: "Buffer", cmd: "MoveCursorV", mods: "",  key: "j", amt:  1, flags: ["scrollToCursor", "resetCursorBlink", "undoSeqBreak"]},
				{elem: "Buffer", cmd: "Backspace",   mods: "S", key: "x", amt:  0, flags: ["scrollToCursor", "resetCursorBlink", "rehighlight"]},
				{elem: "Buffer", cmd: "Delete",      mods: "",  key: "x", amt:  0, flags: ["scrollToCursor", "resetCursorBlink", "rehighlight"]},
				{elem: "Buffer", cmd: "Undo",        mods: "",  key: "u", amt:  0, flags: ["scrollToCursor", "rehighlight"]},
				{elem: "Buffer", cmd: "Indent",      mods: "",  key: ">", amt:  0, flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
				{elem: "Buffer", cmd: "Unindent",    mods: "",  key: "<", amt:  0, flags: ["scrollToCursor", "rehighlight", "undoSeqBreak"]},
			]},
			
			{mode: 667, cmd_list: [ // vim insert mode
				{elem: "Buffer", cmd: "InsertChar", mods: "", key: "VK_Print", amt: 0, flags: ["scrollToCursor", "resetCursorBlink", "rehighlight"]}, // normal, printable characters
			]},
			
			{mode: 668, cmd_list: [ // vim replace (overwrite) mode
				{elem: "Buffer", cmd: "OverwriteChar", mods: "", key: "VK_Print", amt: 0, flags: ["scrollToCursor", "resetCursorBlink", "rehighlight"]}, // normal, printable characters
			]},
			
			{elem: "Hexedit", cmd: "MoveCursorH",  mods: "",  key: "XK_Left",  amt: -1},
			{elem: "Hexedit", cmd: "MoveCursorH",  mods: "",  key: "XK_Right", amt:  1},
			{elem: "Hexedit", cmd: "MoveCursorV",  mods: "",  key: "XK_Up",    amt: -1},
			{elem: "Hexedit", cmd: "MoveCursorV",  mods: "",  key: "XK_Down",  amt:  1},
			{elem: "Hexedit", cmd: "ScrollV",      mods: "",  key: "XK_Prior", amt: -8},
			{elem: "Hexedit", cmd: "ScrollV",      mods: "",  key: "XK_Next",  amt:  8},

			{elem: "FileBrowser", cmd: "MoveCursorV", mods: "", key: "XK_Up", amt: -1, flags: []},
			{elem: "FileBrowser", cmd: "MoveCursorV", mods: "", key: "XK_Down", amt: 1, flags: []},
//			{elem: "FileViewer", cmd: "MoveCursorV", mods: "", key: "RAT_1", amt: 1, flags: []},
			{elem: "FileBrowser", cmd: "ParentDir", mods: "", key: "XK_BackSpace", amt: 0, flags: []},
			{elem: "FileBrowser", cmd: "ToggleSelect", mods: "", key: "XK_space", amt: 0, flags: []},
			{elem: "FileBrowser", cmd: "SmartOpen", mods: "", key: "XK_Return", amt: 0, flags: []},
			
			{elem: "FileBrowser", sub_elem: "FileRow" cmd: "ToggleSelect", mods: "", key: "RAT_1", amt: 0, flags: []},
			{elem: "FileBrowser", sub_elem: "FileRow" cmd: "SmartOpen", mods: "", key: "RAT_1x2", amt: 0, flags: []},
			
			
		],
	},
}

